import axios from 'axios'
import { useMessage } from '@/hooks/message'
import LocalCache from '@/utils/cache'
// 动态设置基础URL
const apiGetaway = process.env.VUE_APP_API_GETAWAY ? process.env.VUE_APP_API_GETAWAY : 'http://testcr.ouyeelf.com'
console.log(apiGetaway,'apiGetaway')
// let tempToken = 'eyJsb2dpbk5hbWUiOiJHSkZISFoiLCJkZXB0Q05hbWUiOm51bGwsInVzZXJDbmFtZSI6IihnainliIbooYzooYzplb8iLCJkZXB0Q29kZSI6bnVsbH0'
let tempToken = ''
let tokenStr = LocalCache.getCache('user')&&LocalCache.getCache('user').token
if(tokenStr){
  tempToken = tokenStr
}
// 创建一个通用的请求处理函数，用于添加token和错误处理  
function requestWithToken(config) {  
  // 添加token到headers（如果已存在）  
  // if (localStorage.getItem('token')) {  
  //   config.headers.Authorization = tempToken;  
  // } 
  return axios(config).then(handleResponseSuccess).catch(handleResponseError);  
}  
// 创建axios实例
const HTTP = axios.create({
  baseURL: apiGetaway,
  timeout: 5000,
  headers: {
    'Authorization': tempToken, // 添加Authorization头
  }
})

// 添加响应拦截器
HTTP.interceptors.response.use(
  response => handleResponseSuccess(response),
  error => handleResponseError(error)
)
/**
 * 处理响应成功的情况
 * @param {Object} response - 响应对象
 * @returns {Promise} 返回响应数据的Promise
 */
function handleResponseSuccess(response) {
  if (!response.data.success) {
    // 显示统一提示框
    useMessage().error(response.data.message || '未知错误');
    return Promise.reject(response.data);
  }
  return response;
}

/**
 * 处理响应错误的情况
 * @param {Object} error - 错误对象
 * @returns {Promise} 返回错误信息的Promise
 */
function handleResponseError(error) {

  let message = '未知错误';
  if (error.response) {
    message = error.response.data.message || error.response.status;
    // 对特定错误进行处理
    switch (error.response.data.code) {
      case 401:
        // 未认证，签名失效
        break;
      case 403:
        // forbidden，未授权
        break;
      default:
        // 其他错误代码处理...
    }
  } else if (error.message) {
    // 网络请求失败的情况
    message = error.message;
  }
  // 假设存在一个统一错误提示函数
  // Message.error(message)
  console.log('Error:', message);
  return Promise.reject(error.response?.data || error);
}
// 自定义请求方法  
HTTP.get = function (url, params = {}, config = {headers: {
  Authorization: tempToken
}}) {  
  return requestWithToken({  
    method: 'get',  
    url: apiGetaway + url,  
    params: params,  
    ...config,  
  });  
};  
  
HTTP.post = function (url, data = {}, config = {headers: {
    Authorization: tempToken
  }}) {  
  return requestWithToken({  
    method: 'post',  
    url: apiGetaway + url,
    // url: 'http://10.48.133.76:8099'+url,    
    data: data,  
    ...config,  
  });  
};  
  
HTTP.postForm = function (url, data = {}, config = {headers: {
  Authorization: tempToken
}}) {  
  // 使用qs库来转换对象为x-www-form-urlencoded格式（需要先安装qs库）  
  // import qs from 'qs';  
  // data = qs.stringify(data);  
  
  // 或者使用URLSearchParams（浏览器原生支持）  
  const formData = new URLSearchParams();  
  for (let key in data) {  
    formData.append(key, data[key]);  
  }  
  
  // 注意：这里我们假设后端支持接收x-www-form-urlencoded格式的POST数据  
  // 如果不支持，你可能需要设置config.headers['Content-Type'] = 'application/x-www-form-urlencoded'  
  return requestWithToken({  
    method: 'post',  
    url: apiGetaway + url,  
    data: formData, // 或者 qs.stringify(data)  
    ...config,  
  });  
};  

// HTTP.exportApiFunc = function (url,params,name) {
//   fetch(apiGetaway + url, {
//       method: 'POST', // 使用 POST 请求下载文件
//       headers: {
//         'Content-Type': 'application/json', // 设置请求头为 JSON
//         'Authorization': tempToken, // 添加Authorization头
//       },
//       body: JSON.stringify(params), // 传递文件名等参数
//     })
//       .then(response => {
//         if (!response.ok) {
//           throw new Error('Network response was not ok');
//         }
//         return response.blob(); // 将响应体解析为 Blob 对象
//       })
//       .then(blob => {
//         const url = window.URL.createObjectURL(blob); // 创建一个临时 URL
//         const a = document.createElement('a');
//         a.href = url;
//         a.download = `${name}.xls`; // 设置文件名
//         document.body.appendChild(a);
//         a.click(); // 触发点击事件进行下载
//         window.URL.revokeObjectURL(url); // 释放临时 URL
//         document.body.removeChild(a); // 删除创建的 <a> 元素
//       })
//       .catch(error => {
//         console.error('There was a problem with the fetch operation:', error);
//       });
// }
HTTP.exportApiFunc = function (url,params,name) {
  return new Promise((resolve, reject) => {
    fetch(apiGetaway + url, {
      method: 'POST', // 使用 POST 请求下载文件
      headers: {
        'Content-Type': 'application/json', // 设置请求头为 JSON
        'Authorization': tempToken, // 添加Authorization头
      },
      body: JSON.stringify(params), // 传递文件名等参数
    })
      .then(response => {
        if (!response.ok) {
          throw new Error('Network response was not ok');
        }
        return response.blob(); // 将响应体解析为 Blob 对象
      })
      .then(blob => {
        console.log(blob,'查看blob')
        const url = window.URL.createObjectURL(blob); // 创建一个临时 URL
        const a = document.createElement('a');
        a.href = url;
        a.download = `${name}.xls`; // 设置文件名
        document.body.appendChild(a);
        a.click(); // 触发点击事件进行下载
        window.URL.revokeObjectURL(url); // 释放临时 URL
        document.body.removeChild(a); // 删除创建的 <a> 元素
        resolve(); // 在这里添加 resolve() 调用来表明操作完成
      })
      .catch(error => {
        console.error('导出失败:', error);
        reject(error); // 在这里添加 reject() 调用来传递错误
      });
    });
}

HTTP.ImportApiFunc = function (url, data = {}, config = {headers: {
  'Content-Type': 'multipart/form-data',
  Authorization: tempToken
}}) {  
return requestWithToken({  
  method: 'post',  
  url: apiGetaway + url,
  // url: 'http://10.48.133.76:8099'+url,    
  data: data,  
  ...config,  
});  
}; 

  

export default HTTP
